package APE.Tableau;

public class Tri {

	static int[] tab1= new int[15];
	static int[] tab2= new int[15];
	static int[] tab3= new int[15];
	
	public static void main(String[] args) {
		
		initialisationTab(tab1);
		initialisationTab(tab2);
		initialisationTab(tab3);
		tri1(tab1);
		affichage(tab1);
		tri2(tab2);
		affichage(tab2);
		affichage(tab3);
		tri3(tab3);
		affichage(tab3);
	}
	
	static void initialisationTab(int[]tabTemp){
		
		for (int i =0 ; i< tabTemp.length; i++){
			tabTemp[i] = (int)(80*Math.random());
		}
		
		
	}

	static void affichage(int[]tabTemp){
		
		for (int i =0 ; i< tabTemp.length; i++){
			System.out.print(tabTemp[i]);
			System.out.print(" ");	
		}
		System.out.print('\n');
	}
	
	static void tri2(int[]tabTemp){
		int temp=0;
		for (int j =0;j<tabTemp.length;j++)
		for(int i = 1;i<tabTemp.length;i++){
			if (tabTemp[i-1] > tabTemp[i]){
				temp = tabTemp[i-1];
				tabTemp[i-1] = tabTemp[i];
				tabTemp[i]=temp;
			}		
		}	
		
		return;
	}
	
	static void tri1(int[]tabTemp){
		int temp;
		for(int i = 0; i < tabTemp.length;i++){
			for(int j = 0; j < tabTemp.length;j++){
				if (tabTemp[i] < tabTemp[j]){
					temp = tabTemp[i];
					tabTemp[i] = tabTemp[j];
					tabTemp[j]=temp;
					
				}
				
			}
			
		}
	}

	static void tri3(int[]tabTemp){
		quicksort(tabTemp,0,tabTemp.length -1);
		
	}
	static void quicksort(int[] tab, int debut, int fin){
		
		int nbrAp=0, temp,count=0;
		int pivot = tab[fin];				//je d�finis un pivot
		for (int i=debut; i<=fin; i++){		//je trouve la bonne place de mon pivot
			if ( tab[i] > pivot) nbrAp++;
		}
		temp =tab[nbrAp];					//je place mon pivot au bon endroit
		tab[nbrAp]=tab[fin];
		tab[fin]=temp;
		System.out.println(nbrAp);

		for (int j=debut; j<=fin; j++){//je reparcours mon tableau et je remet les 
			
			if ( tab[j] > pivot){			// nombres en dessus ou en dessous du pivot
				temp =tab[j];				//je place mon pivot au bon endroit
				tab[j]=tab[nbrAp+count];
				tab[nbrAp+count]=temp;
				count++;
				j=0;
			} 
			if (count == nbrAp)break;
		}
	
		
		
		//quicksort(tab,debut,fin);
		//quicksort(tab,debut,nbrAp);
		
		
	}
	
	
	
	
	/*static void quicksort(int[] tab, int debut, int fin){
		int gauche = debut+1;
	    int droite = fin;
	    int pivot = tab[debut], temp;
		if (debut > fin)return;
		
		while (true){

			do droite--; while(tab[droite] > pivot);
	        do gauche++; while(tab[gauche] < pivot);
			if(tab[gauche]>=tab[droite]){
				temp =tab[gauche];
				tab[gauche] = tab[droite];
				tab[droite] = temp;
			}else break;
		}
		quicksort(tab,gauche,droite);
	    	
	}*/
	


}
